[INFO] cloning repository https://github.com/antipolaire/fluidr
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/antipolaire/fluidr" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fantipolaire%2Ffluidr", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fantipolaire%2Ffluidr'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 9af61e3ee81ef47c5ddf36c684abd72081e71370
[INFO] checking antipolaire/fluidr against master#e6e4f7ed1589e03bc2f6c5931c1a72e7947e8682 for beta-170-4
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fantipolaire%2Ffluidr" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/antipolaire/fluidr on toolchain e6e4f7ed1589e03bc2f6c5931c1a72e7947e8682
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+e6e4f7ed1589e03bc2f6c5931c1a72e7947e8682" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] removed /workspace/builds/worker-5-tc2/source/.cargo/config.toml
[INFO] started tweaking git repo https://github.com/antipolaire/fluidr
[INFO] finished tweaking git repo https://github.com/antipolaire/fluidr
[INFO] tweaked toml for git repo https://github.com/antipolaire/fluidr written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] crate git repo https://github.com/antipolaire/fluidr already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+e6e4f7ed1589e03bc2f6c5931c1a72e7947e8682" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:19e73879b68f455e41552ea35293514db52ea292d993f571636dbffedb77a1ee" "/opt/rustwide/cargo-home/bin/cargo" "+e6e4f7ed1589e03bc2f6c5931c1a72e7947e8682" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 31f1e93eec3406fb43d0457858a94d8c48b47c25ed2010811a3da026e392d2f1
[INFO] running `Command { std: "docker" "start" "-a" "31f1e93eec3406fb43d0457858a94d8c48b47c25ed2010811a3da026e392d2f1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "31f1e93eec3406fb43d0457858a94d8c48b47c25ed2010811a3da026e392d2f1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "31f1e93eec3406fb43d0457858a94d8c48b47c25ed2010811a3da026e392d2f1", kill_on_drop: false }`
[INFO] [stdout] 31f1e93eec3406fb43d0457858a94d8c48b47c25ed2010811a3da026e392d2f1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:19e73879b68f455e41552ea35293514db52ea292d993f571636dbffedb77a1ee" "/opt/rustwide/cargo-home/bin/cargo" "+e6e4f7ed1589e03bc2f6c5931c1a72e7947e8682" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 565c3c91a2f411cea7a932225a54fc0349832f4b27877047560845dead3afa81
[INFO] running `Command { std: "docker" "start" "-a" "565c3c91a2f411cea7a932225a54fc0349832f4b27877047560845dead3afa81", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.44
[INFO] [stderr]    Compiling quote v1.0.21
[INFO] [stderr]    Compiling unicode-ident v1.0.4
[INFO] [stderr]    Compiling syn v1.0.100
[INFO] [stderr]    Compiling libc v0.2.133
[INFO] [stderr]    Compiling serde_derive v1.0.145
[INFO] [stderr]    Compiling serde v1.0.145
[INFO] [stderr]     Checking once_cell v1.15.0
[INFO] [stderr]    Compiling lock_api v0.4.9
[INFO] [stderr]    Compiling ahash v0.7.6
[INFO] [stderr]    Compiling thiserror v1.0.36
[INFO] [stderr]    Compiling parking_lot_core v0.9.3
[INFO] [stderr]    Compiling memchr v2.5.0
[INFO] [stderr]     Checking instant v0.1.12
[INFO] [stderr]     Checking pin-project-lite v0.2.9
[INFO] [stderr]    Compiling log v0.4.17
[INFO] [stderr]    Compiling futures-core v0.3.24
[INFO] [stderr]     Checking tracing-core v0.1.29
[INFO] [stderr]    Compiling num-traits v0.2.15
[INFO] [stderr]     Checking fixedbitset v0.4.2
[INFO] [stderr]    Compiling slab v0.4.7
[INFO] [stderr]     Checking cache-padded v1.2.0
[INFO] [stderr]     Checking concurrent-queue v1.2.4
[INFO] [stderr]     Checking tracing v0.1.36
[INFO] [stderr]     Checking fxhash v0.2.1
[INFO] [stderr]     Checking futures-io v0.3.24
[INFO] [stderr]     Checking fastrand v1.8.0
[INFO] [stderr]    Compiling erased-serde v0.3.23
[INFO] [stderr]     Checking waker-fn v1.1.0
[INFO] [stderr]     Checking parking v2.0.0
[INFO] [stderr]     Checking getrandom v0.2.7
[INFO] [stderr]     Checking futures-lite v1.12.0
[INFO] [stderr]     Checking async-task v4.3.0
[INFO] [stderr]     Checking event-listener v2.5.3
[INFO] [stderr]     Checking num_cpus v1.13.1
[INFO] [stderr]    Compiling uuid v1.1.2
[INFO] [stderr]     Checking async-channel v1.7.1
[INFO] [stderr]     Checking thread_local v1.1.4
[INFO] [stderr]     Checking bevy_ptr v0.8.1
[INFO] [stderr]     Checking downcast-rs v1.2.0
[INFO] [stderr]    Compiling pkg-config v0.3.25
[INFO] [stderr]    Compiling crossbeam-utils v0.8.11
[INFO] [stderr]     Checking regex-syntax v0.6.27
[INFO] [stderr]    Compiling num-integer v0.1.45
[INFO] [stderr]    Compiling crc32fast v1.3.2
[INFO] [stderr]     Checking async-executor v1.4.1
[INFO] [stderr]     Checking aho-corasick v0.7.19
[INFO] [stderr]     Checking bevy_tasks v0.8.1
[INFO] [stderr]    Compiling indexmap v1.9.1
[INFO] [stderr]     Checking cty v0.2.2
[INFO] [stderr]     Checking crossbeam-channel v0.5.6
[INFO] [stderr]     Checking raw-window-handle v0.4.3
[INFO] [stderr]     Checking tracing-log v0.1.3
[INFO] [stderr]     Checking sharded-slab v0.1.4
[INFO] [stderr]     Checking mio v0.8.4
[INFO] [stderr]     Checking ansi_term v0.12.1
[INFO] [stderr]     Checking inotify-sys v0.1.5
[INFO] [stderr]     Checking libloading v0.7.3
[INFO] [stderr]    Compiling khronos-egl v4.1.0
[INFO] [stderr]     Checking unicode-width v0.1.10
[INFO] [stderr]    Compiling ash v0.37.0+1.3.209
[INFO] [stderr]     Checking bit-vec v0.6.3
[INFO] [stderr]     Checking termcolor v1.1.3
[INFO] [stderr]    Compiling anyhow v1.0.65
[INFO] [stderr]     Checking unicode-xid v0.2.4
[INFO] [stderr]     Checking codespan-reporting v0.11.1
[INFO] [stderr]     Checking bit-set v0.5.3
[INFO] [stderr]     Checking pp-rs v0.2.1
[INFO] [stderr]     Checking inotify v0.9.6
[INFO] [stderr]     Checking spirv v0.2.0+1.5.4
[INFO] [stderr]     Checking filetime v0.2.17
[INFO] [stderr]     Checking gpu-descriptor-types v0.1.1
[INFO] [stderr]     Checking gpu-alloc-types v0.2.0
[INFO] [stderr]     Checking arrayvec v0.7.2
[INFO] [stderr]     Checking adler v1.0.2
[INFO] [stderr]     Checking hexf-parse v0.2.1
[INFO] [stderr]     Checking rustc-hash v1.1.0
[INFO] [stderr]    Compiling cfg_aliases v0.1.1
[INFO] [stderr]     Checking gpu-alloc v0.5.3
[INFO] [stderr]     Checking miniz_oxide v0.5.4
[INFO] [stderr]    Compiling wgpu-core v0.13.2
[INFO] [stderr]     Checking regex-automata v0.1.10
[INFO] [stderr]     Checking regex v1.6.0
[INFO] [stderr]    Compiling toml v0.5.9
[INFO] [stderr]    Compiling encase_derive_impl v0.3.0
[INFO] [stderr]     Checking notify v5.0.0-pre.15
[INFO] [stderr]     Checking wgpu-types v0.13.2
[INFO] [stderr]     Checking matchers v0.1.0
[INFO] [stderr]    Compiling num-rational v0.4.1
[INFO] [stderr]     Checking color_quant v1.1.0
[INFO] [stderr]     Checking profiling v1.0.6
[INFO] [stderr]     Checking glow v0.11.2
[INFO] [stderr]     Checking renderdoc-sys v0.7.1
[INFO] [stderr]     Checking inplace_it v0.3.5
[INFO] [stderr]     Checking flate2 v1.0.24
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]    Compiling bevy_macro_utils v0.8.1
[INFO] [stderr]     Checking copyless v0.1.5
[INFO] [stderr]     Checking png v0.17.6
[INFO] [stderr]     Checking scoped_threadpool v0.1.9
[INFO] [stderr]     Checking const_panic v0.2.4
[INFO] [stderr]    Compiling parking_lot_core v0.8.5
[INFO] [stderr]     Checking hex v0.4.3
[INFO] [stderr]     Checking tinyvec v1.6.0
[INFO] [stderr]     Checking ttf-parser v0.15.2
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]     Checking ab_glyph_rasterizer v0.1.7
[INFO] [stderr]     Checking radsort v0.1.0
[INFO] [stderr]     Checking percent-encoding v2.2.0
[INFO] [stderr]    Compiling libudev-sys v0.1.4
[INFO] [stderr]    Compiling serde_json v1.0.85
[INFO] [stderr]     Checking nix v0.23.1
[INFO] [stderr]    Compiling x11-dl v2.20.0
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]     Checking euclid v0.22.7
[INFO] [stderr]     Checking svg_fmt v0.4.1
[INFO] [stderr]     Checking ryu v1.0.11
[INFO] [stderr]    Compiling inflections v1.1.1
[INFO] [stderr]     Checking itoa v1.0.3
[INFO] [stderr]    Compiling cpal v0.13.5
[INFO] [stderr]     Checking nix v0.24.2
[INFO] [stderr]     Checking ogg v0.8.0
[INFO] [stderr]    Compiling bytemuck_derive v1.2.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.36
[INFO] [stderr]    Compiling bevy_reflect_derive v0.8.1
[INFO] [stderr]    Compiling bevy_ecs_macros v0.8.1
[INFO] [stderr]    Compiling bevy_derive v0.8.1
[INFO] [stderr]     Checking bytemuck v1.12.1
[INFO] [stderr]    Compiling encase_derive v0.3.0
[INFO] [stderr]     Checking image v0.24.4
[INFO] [stderr]    Compiling bevy_render_macros v0.8.1
[INFO] [stderr]    Compiling bevy_encase_derive v0.8.1
[INFO] [stderr]     Checking owned_ttf_parser v0.15.2
[INFO] [stderr]     Checking ab_glyph v0.2.17
[INFO] [stderr]     Checking alsa v0.6.0
[INFO] [stderr]     Checking guillotiere v0.6.2
[INFO] [stderr]    Compiling gltf-derive v1.0.0
[INFO] [stderr]     Checking vec_map v0.8.2
[INFO] [stderr]    Compiling winit v0.26.1
[INFO] [stderr]     Checking adler32 v1.2.0
[INFO] [stderr]     Checking rectangle-pack v0.4.2
[INFO] [stderr]     Checking xi-unicode v0.3.0
[INFO] [stderr]     Checking lewton v0.10.2
[INFO] [stderr]    Compiling hash32-derive v0.1.1
[INFO] [stderr]     Checking glyph_brush_layout v0.2.3
[INFO] [stderr]     Checking hash32 v0.2.1
[INFO] [stderr]    Compiling ahash v0.8.0
[INFO] [stderr]    Compiling num-rational v0.3.2
[INFO] [stderr]    Compiling num-iter v0.1.43
[INFO] [stderr]     Checking miniz_oxide v0.3.7
[INFO] [stderr]     Checking deflate v0.8.6
[INFO] [stderr]     Checking unicode-normalization v0.1.22
[INFO] [stderr]     Checking taffy v0.1.0
[INFO] [stderr]     Checking unicode-bidi v0.3.8
[INFO] [stderr]     Checking png v0.16.8
[INFO] [stderr]     Checking idna v0.3.0
[INFO] [stderr]     Checking emath v0.19.0
[INFO] [stderr]     Checking form_urlencoded v1.1.0
[INFO] [stderr]     Checking nix v0.22.3
[INFO] [stderr]     Checking gethostname v0.2.3
[INFO] [stderr]     Checking nohash-hasher v0.2.0
[INFO] [stderr]    Compiling proc_vector2d v1.0.2
[INFO] [stderr]     Checking url v2.3.1
[INFO] [stderr]     Checking image v0.23.14
[INFO] [stderr]     Checking vector2d v2.2.0
[INFO] [stderr]     Checking webbrowser v0.7.1
[INFO] [stderr]     Checking x11rb v0.9.0
[INFO] [stderr]     Checking smallvec v1.9.0
[INFO] [stderr]     Checking hashbrown v0.12.3
[INFO] [stderr]     Checking glam v0.21.3
[INFO] [stderr]     Checking ron v0.7.1
[INFO] [stderr]     Checking tracing-subscriber v0.3.15
[INFO] [stderr]     Checking parking_lot v0.12.1
[INFO] [stderr]     Checking bevy_utils v0.8.1
[INFO] [stderr]     Checking gpu-descriptor v0.2.3
[INFO] [stderr]     Checking gilrs-core v0.4.1
[INFO] [stderr]     Checking epaint v0.19.0
[INFO] [stderr]     Checking parking_lot v0.11.2
[INFO] [stderr]     Checking gltf-json v1.0.0
[INFO] [stderr]     Checking gilrs v0.9.0
[INFO] [stderr]     Checking petgraph v0.6.2
[INFO] [stderr]     Checking rodio v0.15.0
[INFO] [stderr]     Checking egui v0.19.0
[INFO] [stderr]     Checking bevy_reflect v0.8.1
[INFO] [stderr]     Checking bevy_math v0.8.1
[INFO] [stderr]     Checking bevy_mikktspace v0.8.1
[INFO] [stderr]     Checking hexasphere v7.2.1
[INFO] [stderr]     Checking encase v0.3.0
[INFO] [stderr]     Checking naga v0.9.0
[INFO] [stderr]     Checking gltf v1.0.0
[INFO] [stderr]     Checking bevy_ecs v0.8.1
[INFO] [stderr]     Checking arboard v2.1.1
[INFO] [stderr]     Checking wgpu-hal v0.13.2
[INFO] [stderr]     Checking bevy_app v0.8.1
[INFO] [stderr]     Checking bevy_log v0.8.1
[INFO] [stderr]     Checking bevy_time v0.8.1
[INFO] [stderr]     Checking bevy_input v0.8.1
[INFO] [stderr]     Checking bevy_hierarchy v0.8.1
[INFO] [stderr]     Checking bevy_core v0.8.1
[INFO] [stderr]     Checking bevy_transform v0.8.1
[INFO] [stderr]     Checking bevy_diagnostic v0.8.1
[INFO] [stderr]     Checking bevy_window v0.8.1
[INFO] [stderr]     Checking bevy_gilrs v0.8.1
[INFO] [stderr]     Checking bevy_asset v0.8.1
[INFO] [stderr]     Checking bevy_winit v0.8.1
[INFO] [stderr]     Checking bevy_animation v0.8.1
[INFO] [stderr]     Checking bevy_audio v0.8.1
[INFO] [stderr]     Checking wgpu v0.13.1
[INFO] [stderr]     Checking bevy_render v0.8.1
[INFO] [stderr]     Checking bevy_core_pipeline v0.8.1
[INFO] [stderr]     Checking bevy_scene v0.8.1
[INFO] [stderr]     Checking bevy_sprite v0.8.1
[INFO] [stderr]     Checking bevy_pbr v0.8.1
[INFO] [stderr]     Checking bevy_gltf v0.8.1
[INFO] [stderr]     Checking bevy_text v0.8.1
[INFO] [stderr]     Checking bevy_ui v0.8.1
[INFO] [stderr]     Checking bevy_internal v0.8.1
[INFO] [stderr]     Checking bevy v0.8.1
[INFO] [stderr]     Checking bevy_egui v0.16.1
[INFO] [stderr]     Checking fluid-rust v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 167 |             x[IX!(0, i)] = if b == 1 { -x[IX!(1, i)] } else { x[IX!(1, i)] };
[INFO] [stdout]     |               --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 167 |             x[IX!(0, i)] = if b == 1 { -x[IX!(1, i)] } else { x[IX!(1, i)] };
[INFO] [stdout]     |                                           --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 167 |             x[IX!(0, i)] = if b == 1 { -x[IX!(1, i)] } else { x[IX!(1, i)] };
[INFO] [stdout]     |                                                                 --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 167 |             x[IX!(0, i)] = if b == 1 { -x[IX!(1, i)] } else { x[IX!(1, i)] };
[INFO] [stdout]     |               --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 168 |             x[IX!(N + 1, i)] = if b == 1 { -x[IX!(N, i)] } else { x[IX!(N, i)] };
[INFO] [stdout]     |               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 167 |             x[IX!(0, i)] = if b == 1 { -x[IX!(1, i)] } else { x[IX!(1, i)] };
[INFO] [stdout]     |                                           --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 168 |             x[IX!(N + 1, i)] = if b == 1 { -x[IX!(N, i)] } else { x[IX!(N, i)] };
[INFO] [stdout]     |                                               --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 167 |             x[IX!(0, i)] = if b == 1 { -x[IX!(1, i)] } else { x[IX!(1, i)] };
[INFO] [stdout]     |                                                                 --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 168 |             x[IX!(N + 1, i)] = if b == 1 { -x[IX!(N, i)] } else { x[IX!(N, i)] };
[INFO] [stdout]     |               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 168 |             x[IX!(N + 1, i)] = if b == 1 { -x[IX!(N, i)] } else { x[IX!(N, i)] };
[INFO] [stdout]     |                                                                     --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 168 |             x[IX!(N + 1, i)] = if b == 1 { -x[IX!(N, i)] } else { x[IX!(N, i)] };
[INFO] [stdout]     |                                               --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 169 |             x[IX!(i, 0)] = if b == 2 { -x[IX!(i, 1)] } else { x[IX!(i, 1)] };
[INFO] [stdout]     |               --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 168 |             x[IX!(N + 1, i)] = if b == 1 { -x[IX!(N, i)] } else { x[IX!(N, i)] };
[INFO] [stdout]     |                                                                     --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 169 |             x[IX!(i, 0)] = if b == 2 { -x[IX!(i, 1)] } else { x[IX!(i, 1)] };
[INFO] [stdout]     |                                           --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 169 |             x[IX!(i, 0)] = if b == 2 { -x[IX!(i, 1)] } else { x[IX!(i, 1)] };
[INFO] [stdout]     |               --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 169 |             x[IX!(i, 0)] = if b == 2 { -x[IX!(i, 1)] } else { x[IX!(i, 1)] };
[INFO] [stdout]     |                                                                 --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 170 |             x[IX!(i, N + 1)] = if b == 2 { -x[IX!(i, N)] } else { x[IX!(i, N)] };
[INFO] [stdout]     |               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 170 |             x[IX!(i, N + 1)] = if b == 2 { -x[IX!(i, N)] } else { x[IX!(i, N)] };
[INFO] [stdout]     |                                               --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 170 |             x[IX!(i, N + 1)] = if b == 2 { -x[IX!(i, N)] } else { x[IX!(i, N)] };
[INFO] [stdout]     |                                                                     --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 172 |         x[IX!(0, 0)] = 0.5f32 * (x[IX!(1, 0)] + x[IX!(0, 1)]);
[INFO] [stdout]     |           --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 172 |         x[IX!(0, 0)] = 0.5f32 * (x[IX!(1, 0)] + x[IX!(0, 1)]);
[INFO] [stdout]     |                                    --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 172 |         x[IX!(0, 0)] = 0.5f32 * (x[IX!(1, 0)] + x[IX!(0, 1)]);
[INFO] [stdout]     |                                                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 173 |         x[IX!(0, N + 1)] = 0.5f32 * (x[IX!(1, N + 1)] + x[IX!(0, N)]);
[INFO] [stdout]     |           ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 173 |         x[IX!(0, N + 1)] = 0.5f32 * (x[IX!(1, N + 1)] + x[IX!(0, N)]);
[INFO] [stdout]     |                                        ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 173 |         x[IX!(0, N + 1)] = 0.5f32 * (x[IX!(1, N + 1)] + x[IX!(0, N)]);
[INFO] [stdout]     |                                                           --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 174 |         x[IX!(N + 1, 0)] = 0.5f32 * (x[IX!(N, 0)] + x[IX!(N + 1, 1)]);
[INFO] [stdout]     |           ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 174 |         x[IX!(N + 1, 0)] = 0.5f32 * (x[IX!(N, 0)] + x[IX!(N + 1, 1)]);
[INFO] [stdout]     |                                        --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 174 |         x[IX!(N + 1, 0)] = 0.5f32 * (x[IX!(N, 0)] + x[IX!(N + 1, 1)]);
[INFO] [stdout]     |                                                       ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 169 |             x[IX!(i, 0)] = if b == 2 { -x[IX!(i, 1)] } else { x[IX!(i, 1)] };
[INFO] [stdout]     |                                           --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 169 |             x[IX!(i, 0)] = if b == 2 { -x[IX!(i, 1)] } else { x[IX!(i, 1)] };
[INFO] [stdout]     |                                                                 --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 170 |             x[IX!(i, N + 1)] = if b == 2 { -x[IX!(i, N)] } else { x[IX!(i, N)] };
[INFO] [stdout]     |               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 170 |             x[IX!(i, N + 1)] = if b == 2 { -x[IX!(i, N)] } else { x[IX!(i, N)] };
[INFO] [stdout]     |                                               --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 170 |             x[IX!(i, N + 1)] = if b == 2 { -x[IX!(i, N)] } else { x[IX!(i, N)] };
[INFO] [stdout]     |                                                                     --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 172 |         x[IX!(0, 0)] = 0.5f32 * (x[IX!(1, 0)] + x[IX!(0, 1)]);
[INFO] [stdout]     |           --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 172 |         x[IX!(0, 0)] = 0.5f32 * (x[IX!(1, 0)] + x[IX!(0, 1)]);
[INFO] [stdout]     |                                    --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 172 |         x[IX!(0, 0)] = 0.5f32 * (x[IX!(1, 0)] + x[IX!(0, 1)]);
[INFO] [stdout]     |                                                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 173 |         x[IX!(0, N + 1)] = 0.5f32 * (x[IX!(1, N + 1)] + x[IX!(0, N)]);
[INFO] [stdout]     |           ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 173 |         x[IX!(0, N + 1)] = 0.5f32 * (x[IX!(1, N + 1)] + x[IX!(0, N)]);
[INFO] [stdout]     |                                        ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 173 |         x[IX!(0, N + 1)] = 0.5f32 * (x[IX!(1, N + 1)] + x[IX!(0, N)]);
[INFO] [stdout]     |                                                           --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 174 |         x[IX!(N + 1, 0)] = 0.5f32 * (x[IX!(N, 0)] + x[IX!(N + 1, 1)]);
[INFO] [stdout]     |           ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 174 |         x[IX!(N + 1, 0)] = 0.5f32 * (x[IX!(N, 0)] + x[IX!(N + 1, 1)]);
[INFO] [stdout]     |                                        --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 174 |         x[IX!(N + 1, 0)] = 0.5f32 * (x[IX!(N, 0)] + x[IX!(N + 1, 1)]);
[INFO] [stdout]     |                                                       ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 175 |         x[IX!(N + 1, N + 1)] = 0.5f32 * (x[IX!(N, N + 1)] + x[IX!(N + 1, N)]);
[INFO] [stdout]     |           ----------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 175 |         x[IX!(N + 1, N + 1)] = 0.5f32 * (x[IX!(N, N + 1)] + x[IX!(N + 1, N)]);
[INFO] [stdout]     |                                            ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 175 |         x[IX!(N + 1, N + 1)] = 0.5f32 * (x[IX!(N, N + 1)] + x[IX!(N + 1, N)]);
[INFO] [stdout]     |                                                               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                       --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                        --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 175 |         x[IX!(N + 1, N + 1)] = 0.5f32 * (x[IX!(N, N + 1)] + x[IX!(N + 1, N)]);
[INFO] [stdout]     |           ----------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                                            ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                                                               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                                                                                  ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                                                                                                     ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 255 |                 let mut x = i as f32 - dt0 * u[IX!(i, j)];
[INFO] [stdout]     |                                                --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 256 |                 let mut y = j as f32 - dt0 * v[IX!(i, j)];
[INFO] [stdout]     |                                                --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 277 |                 d[IX!(i, j)] = s0 * (t0 * d0[IX!(i0, j0)] + t1 * d0[IX!(i0, j1)]) +
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 277 |                 d[IX!(i, j)] = s0 * (t0 * d0[IX!(i0, j0)] + t1 * d0[IX!(i0, j1)]) +
[INFO] [stdout]     |                                              ----------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 277 |                 d[IX!(i, j)] = s0 * (t0 * d0[IX!(i0, j0)] + t1 * d0[IX!(i0, j1)]) +
[INFO] [stdout]     |                                                                     ----------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 278 |                     s1 * (t0 * d0[IX!(i1, j0)] + t1 * d0[IX!(i1, j1)]);
[INFO] [stdout]     |                                   ----------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 278 |                     s1 * (t0 * d0[IX!(i1, j0)] + t1 * d0[IX!(i1, j1)]);
[INFO] [stdout]     |                                                          ----------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                     --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                                               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                                                                  ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                                                                                     ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                                                                                                        ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 313 |                 p[IX!(i, j)] = 0.0f32;
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 175 |         x[IX!(N + 1, N + 1)] = 0.5f32 * (x[IX!(N, N + 1)] + x[IX!(N + 1, N)]);
[INFO] [stdout]     |                                            ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 175 |         x[IX!(N + 1, N + 1)] = 0.5f32 * (x[IX!(N, N + 1)] + x[IX!(N + 1, N)]);
[INFO] [stdout]     |                                                               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                       --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                        --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                                            ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                                                               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                                                                                  ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 321 |                 u[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i + 1, j)] - p[IX!(i - 1, j)]);
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 321 |                 u[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i + 1, j)] - p[IX!(i - 1, j)]);
[INFO] [stdout]     |                                                        ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 321 |                 u[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i + 1, j)] - p[IX!(i - 1, j)]);
[INFO] [stdout]     |                                                                           ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 322 |                 v[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i, j + 1)] - p[IX!(i, j - 1)]);
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 322 |                 v[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i, j + 1)] - p[IX!(i, j - 1)]);
[INFO] [stdout]     |                                                        ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 322 |                 v[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i, j + 1)] - p[IX!(i, j - 1)]);
[INFO] [stdout]     |                                                                           ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 411 |                 self.u0[IX!(3, y)] = self.advect_amount;
[INFO] [stdout]     |                         --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 434 |         self.u[IX!(x, y)]
[INFO] [stdout]     |                --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 443 |         self.v[IX!(x, y)]
[INFO] [stdout]     |                --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 454 |         self.dens[IX!(x, y)]
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 196 |                     x[IX!(i, j)] = (x0[IX!(i, j)] + a * (x[IX!(i - 1, j)] + x[IX!(i + 1, j)] + x[IX!(i, j - 1)] + x[IX!(i, j + 1)])) / c;
[INFO] [stdout]     |                                                                                                                     ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 255 |                 let mut x = i as f32 - dt0 * u[IX!(i, j)];
[INFO] [stdout]     |                                                --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 256 |                 let mut y = j as f32 - dt0 * v[IX!(i, j)];
[INFO] [stdout]     |                                                --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 277 |                 d[IX!(i, j)] = s0 * (t0 * d0[IX!(i0, j0)] + t1 * d0[IX!(i0, j1)]) +
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 277 |                 d[IX!(i, j)] = s0 * (t0 * d0[IX!(i0, j0)] + t1 * d0[IX!(i0, j1)]) +
[INFO] [stdout]     |                                              ----------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 277 |                 d[IX!(i, j)] = s0 * (t0 * d0[IX!(i0, j0)] + t1 * d0[IX!(i0, j1)]) +
[INFO] [stdout]     |                                                                     ----------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 278 |                     s1 * (t0 * d0[IX!(i1, j0)] + t1 * d0[IX!(i1, j1)]);
[INFO] [stdout]     |                                   ----------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 278 |                     s1 * (t0 * d0[IX!(i1, j0)] + t1 * d0[IX!(i1, j1)]);
[INFO] [stdout]     |                                                          ----------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                     --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                                               ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                                                                  ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                                                                                     ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 312 |                 div[IX!(i, j)] = -0.5f32 * (u[IX!(i + 1, j)] - u[IX!(i - 1, j)] + v[IX!(i, j + 1)] - v[IX!(i, j - 1)]) / N as f32;
[INFO] [stdout]     |                                                                                                        ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 313 |                 p[IX!(i, j)] = 0.0f32;
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 321 |                 u[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i + 1, j)] - p[IX!(i - 1, j)]);
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 321 |                 u[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i + 1, j)] - p[IX!(i - 1, j)]);
[INFO] [stdout]     |                                                        ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 321 |                 u[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i + 1, j)] - p[IX!(i - 1, j)]);
[INFO] [stdout]     |                                                                           ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 322 |                 v[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i, j + 1)] - p[IX!(i, j - 1)]);
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 322 |                 v[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i, j + 1)] - p[IX!(i, j - 1)]);
[INFO] [stdout]     |                                                        ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 322 |                 v[IX!(i, j)] -= 0.5f32 * N as f32 * (p[IX!(i, j + 1)] - p[IX!(i, j - 1)]);
[INFO] [stdout]     |                                                                           ------------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 411 |                 self.u0[IX!(3, y)] = self.advect_amount;
[INFO] [stdout]     |                         --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 434 |         self.u[IX!(x, y)]
[INFO] [stdout]     |                --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 443 |         self.v[IX!(x, y)]
[INFO] [stdout]     |                --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: expected expression, found `$`
[INFO] [stdout]    --> src/solver.rs:15:17
[INFO] [stdout]     |
[INFO] [stdout] 15  |         ($i) + ($N + 1) * ($j)
[INFO] [stdout]     |                 ^^ expected expression
[INFO] [stdout] ...
[INFO] [stdout] 454 |         self.dens[IX!(x, y)]
[INFO] [stdout]     |                   --------- in this macro invocation
[INFO] [stdout]     |
[INFO] [stdout]     = note: this error originates in the macro `IX` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0574]: expected struct, variant or union type, found trait `Solver`
[INFO] [stdout]    --> src/solver.rs:480:9
[INFO] [stdout]     |
[INFO] [stdout] 480 |         Solver {
[INFO] [stdout]     |         ^^^^^^ not a struct, variant or union type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `vector2d::Vector2D`
[INFO] [stdout]  --> src/solver.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use vector2d::Vector2D;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0574]: expected struct, variant or union type, found trait `Solver`
[INFO] [stdout]    --> src/solver.rs:480:9
[INFO] [stdout]     |
[INFO] [stdout] 480 |         Solver {
[INFO] [stdout]     |         ^^^^^^ not a struct, variant or union type
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `vector2d::Vector2D`
[INFO] [stdout]  --> src/solver.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use vector2d::Vector2D;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:118:6
[INFO] [stdout]     |
[INFO] [stdout] 118 | impl dyn Solver {
[INFO] [stdout]     |      ^^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:119:20
[INFO] [stdout]     |
[INFO] [stdout] 119 |     fn add_density(&mut self, x: usize, y: usize, amount: f32) {
[INFO] [stdout]     |                    ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:123:21
[INFO] [stdout]     |
[INFO] [stdout] 123 |     fn add_velocity(&mut self, x: usize, y: usize, amount_x: f32, amount_y: f32) {
[INFO] [stdout]     |                     ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:129:20
[INFO] [stdout]     |
[INFO] [stdout] 129 |     fn get_density(&self, x: usize, y: usize) -> f32 {
[INFO] [stdout]     |                    ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:133:21
[INFO] [stdout]     |
[INFO] [stdout] 133 |     fn get_velocity(&self, x: usize, y: usize) -> (f32, f32) {
[INFO] [stdout]     |                     ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:145:19
[INFO] [stdout]     |
[INFO] [stdout] 145 |     fn add_source(&mut self, N: usize, x: &mut Vec<f32>, s: &mut Vec<f32>, dt: f32) {
[INFO] [stdout]     |                   ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:165:16
[INFO] [stdout]     |
[INFO] [stdout] 165 |     fn set_bnd(&mut self, N: usize, b: usize, x: &mut Vec<f32>) {
[INFO] [stdout]     |                ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:192:18
[INFO] [stdout]     |
[INFO] [stdout] 192 |     fn lin_solve(&mut self, N: usize, b: usize, x: &mut Vec<f32>, x0: &mut Vec<f32>, a: f32, c: f32) {
[INFO] [stdout]     |                  ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:209:16
[INFO] [stdout]     |
[INFO] [stdout] 209 |     fn diffuse(&mut self, N: usize, b: usize, x: &mut Vec<f32>, x0: &mut Vec<f32>, viscosity: f32, dt: f32) {
[INFO] [stdout]     |                ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:118:6
[INFO] [stdout]     |
[INFO] [stdout] 118 | impl dyn Solver {
[INFO] [stdout]     |      ^^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:251:15
[INFO] [stdout]     |
[INFO] [stdout] 251 |     fn advect(&mut self, N: usize, b: usize, d: &mut Vec<f32>, d0: &mut Vec<f32>, u: &mut Vec<f32>, v: &mut Vec<f32>, dt: f32) {
[INFO] [stdout]     |               ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:119:20
[INFO] [stdout]     |
[INFO] [stdout] 119 |     fn add_density(&mut self, x: usize, y: usize, amount: f32) {
[INFO] [stdout]     |                    ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:309:16
[INFO] [stdout]     |
[INFO] [stdout] 309 |     fn project(&mut self, N: usize, u: &mut Vec<f32>, v: &mut Vec<f32>, p: &mut Vec<f32>, div: &mut Vec<f32>) {
[INFO] [stdout]     |                ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:123:21
[INFO] [stdout]     |
[INFO] [stdout] 123 |     fn add_velocity(&mut self, x: usize, y: usize, amount_x: f32, amount_y: f32) {
[INFO] [stdout]     |                     ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:339:18
[INFO] [stdout]     |
[INFO] [stdout] 339 |     fn dens_step(&mut self, N: usize, x: &mut Vec<f32>, x0: &mut Vec<f32>, u: &mut Vec<f32>, v: &mut Vec<f32>, diff: f32, dt: f32) {
[INFO] [stdout]     |                  ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:129:20
[INFO] [stdout]     |
[INFO] [stdout] 129 |     fn get_density(&self, x: usize, y: usize) -> f32 {
[INFO] [stdout]     |                    ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:133:21
[INFO] [stdout]     |
[INFO] [stdout] 133 |     fn get_velocity(&self, x: usize, y: usize) -> (f32, f32) {
[INFO] [stdout]     |                     ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:145:19
[INFO] [stdout]     |
[INFO] [stdout] 145 |     fn add_source(&mut self, N: usize, x: &mut Vec<f32>, s: &mut Vec<f32>, dt: f32) {
[INFO] [stdout]     |                   ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:165:16
[INFO] [stdout]     |
[INFO] [stdout] 165 |     fn set_bnd(&mut self, N: usize, b: usize, x: &mut Vec<f32>) {
[INFO] [stdout]     |                ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:192:18
[INFO] [stdout]     |
[INFO] [stdout] 192 |     fn lin_solve(&mut self, N: usize, b: usize, x: &mut Vec<f32>, x0: &mut Vec<f32>, a: f32, c: f32) {
[INFO] [stdout]     |                  ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:362:17
[INFO] [stdout]     |
[INFO] [stdout] 362 |     fn vel_step(&mut self, N: usize, u: &mut Vec<f32>, v: &mut Vec<f32>, u0: &mut Vec<f32>, v0: &mut Vec<f32>, viscosity: f32, dt: f32) {
[INFO] [stdout]     |                 ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:209:16
[INFO] [stdout]     |
[INFO] [stdout] 209 |     fn diffuse(&mut self, N: usize, b: usize, x: &mut Vec<f32>, x0: &mut Vec<f32>, viscosity: f32, dt: f32) {
[INFO] [stdout]     |                ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:389:23
[INFO] [stdout]     |
[INFO] [stdout] 389 |     fn print_velocity(&self) {
[INFO] [stdout]     |                       ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:251:15
[INFO] [stdout]     |
[INFO] [stdout] 251 |     fn advect(&mut self, N: usize, b: usize, d: &mut Vec<f32>, d0: &mut Vec<f32>, u: &mut Vec<f32>, v: &mut Vec<f32>, dt: f32) {
[INFO] [stdout]     |               ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:407:13
[INFO] [stdout]     |
[INFO] [stdout] 407 |     fn fill(&mut self, direction: usize) {
[INFO] [stdout]     |             ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:421:13
[INFO] [stdout]     |
[INFO] [stdout] 421 |     fn step(&mut self) {
[INFO] [stdout]     |             ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:432:23
[INFO] [stdout]     |
[INFO] [stdout] 432 |     fn get_velocity_u(&self, x: usize, y: usize) -> f32 {
[INFO] [stdout]     |                       ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:441:23
[INFO] [stdout]     |
[INFO] [stdout] 441 |     fn get_velocity_v(&self, x: usize, y: usize) -> f32 {
[INFO] [stdout]     |                       ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:452:21
[INFO] [stdout]     |
[INFO] [stdout] 452 |     fn get_pressure(&self, x: usize, y: usize) -> f32 {
[INFO] [stdout]     |                     ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:471:48
[INFO] [stdout]     |
[INFO] [stdout] 471 |     fn new(width: usize, height: usize) -> Box<dyn Solver> {
[INFO] [stdout]     |                                                ^^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:514:13
[INFO] [stdout]     |
[INFO] [stdout] 514 |     fn drop(&mut self) {
[INFO] [stdout]     |             ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:309:16
[INFO] [stdout]     |
[INFO] [stdout] 309 |     fn project(&mut self, N: usize, u: &mut Vec<f32>, v: &mut Vec<f32>, p: &mut Vec<f32>, div: &mut Vec<f32>) {
[INFO] [stdout]     |                ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:339:18
[INFO] [stdout]     |
[INFO] [stdout] 339 |     fn dens_step(&mut self, N: usize, x: &mut Vec<f32>, x0: &mut Vec<f32>, u: &mut Vec<f32>, v: &mut Vec<f32>, diff: f32, dt: f32) {
[INFO] [stdout]     |                  ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:362:17
[INFO] [stdout]     |
[INFO] [stdout] 362 |     fn vel_step(&mut self, N: usize, u: &mut Vec<f32>, v: &mut Vec<f32>, u0: &mut Vec<f32>, v0: &mut Vec<f32>, viscosity: f32, dt: f32) {
[INFO] [stdout]     |                 ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:389:23
[INFO] [stdout]     |
[INFO] [stdout] 389 |     fn print_velocity(&self) {
[INFO] [stdout]     |                       ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:407:13
[INFO] [stdout]     |
[INFO] [stdout] 407 |     fn fill(&mut self, direction: usize) {
[INFO] [stdout]     |             ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:421:13
[INFO] [stdout]     |
[INFO] [stdout] 421 |     fn step(&mut self) {
[INFO] [stdout]     |             ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:432:23
[INFO] [stdout]     |
[INFO] [stdout] 432 |     fn get_velocity_u(&self, x: usize, y: usize) -> f32 {
[INFO] [stdout]     |                       ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:441:23
[INFO] [stdout]     |
[INFO] [stdout] 441 |     fn get_velocity_v(&self, x: usize, y: usize) -> f32 {
[INFO] [stdout]     |                       ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: aborting due to 75 previous errors; 1 warning emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0038, E0574.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0038`.
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:452:21
[INFO] [stdout]     |
[INFO] [stdout] 452 |     fn get_pressure(&self, x: usize, y: usize) -> f32 {
[INFO] [stdout]     |                     ^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:471:48
[INFO] [stdout]     |
[INFO] [stdout] 471 |     fn new(width: usize, height: usize) -> Box<dyn Solver> {
[INFO] [stdout]     |                                                ^^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0038]: the trait `Solver` cannot be made into an object
[INFO] [stdout]    --> src/solver.rs:514:13
[INFO] [stdout]     |
[INFO] [stdout] 514 |     fn drop(&mut self) {
[INFO] [stdout]     |             ^^^^^^^^^ `Solver` cannot be made into an object
[INFO] [stdout]     |
[INFO] [stdout] note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
[INFO] [stdout]    --> src/solver.rs:32:8
[INFO] [stdout]     |
[INFO] [stdout] 31  | trait Solver {
[INFO] [stdout]     |       ------ this trait cannot be made into an object...
[INFO] [stdout] 32  |     fn new() -> Self;
[INFO] [stdout]     |        ^^^ ...because associated function `new` has no `self` parameter
[INFO] [stdout] ...
[INFO] [stdout] 55  |     const cos0: f32 = 100.0;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 56  |     const cos1: f32 = 0.45;
[INFO] [stdout]     |           ^^^^ ...because it contains this associated `const`
[INFO] [stdout] 57  |     const advectAmount: f32 = 10.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 58  |     const viscosity: f32 = 0.00001;
[INFO] [stdout]     |           ^^^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 59  |     const density: f32 = 0.0;
[INFO] [stdout]     |           ^^^^^^^ ...because it contains this associated `const`
[INFO] [stdout] 60  |     const dt: f32 = 0.05;
[INFO] [stdout]     |           ^^ ...because it contains this associated `const`
[INFO] [stdout]     = help: consider moving `dt` to another trait
[INFO] [stdout]     = help: consider moving `cos0` to another trait
[INFO] [stdout]     = help: consider moving `cos1` to another trait
[INFO] [stdout]     = help: consider moving `advectAmount` to another trait
[INFO] [stdout]     = help: consider moving `viscosity` to another trait
[INFO] [stdout]     = help: consider moving `density` to another trait
[INFO] [stdout] help: consider turning `new` into a method by giving it a `&self` argument
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new(&self) -> Self;
[INFO] [stdout]     |            +++++
[INFO] [stdout] help: alternatively, consider constraining `new` so it does not apply to trait objects
[INFO] [stdout]     |
[INFO] [stdout] 32  |     fn new() -> Self where Self: Sized;
[INFO] [stdout]     |                      +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `fluid-rust` (bin "fluid-rust") due to 76 previous errors; 1 warning emitted
[INFO] [stdout] error: aborting due to 75 previous errors; 1 warning emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] Some errors have detailed explanations: E0038, E0574.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0038`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `fluid-rust` (bin "fluid-rust" test) due to 76 previous errors; 1 warning emitted
[INFO] running `Command { std: "docker" "inspect" "565c3c91a2f411cea7a932225a54fc0349832f4b27877047560845dead3afa81", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "565c3c91a2f411cea7a932225a54fc0349832f4b27877047560845dead3afa81", kill_on_drop: false }`
[INFO] [stdout] 565c3c91a2f411cea7a932225a54fc0349832f4b27877047560845dead3afa81
